[ 添付ファイルを添付する ] [ 名前変更このページの名前を変更する ] [ 編集このページを編集する ]

[[トップ>FrontPage]] > [[MAP作成]] > [[トリガーエディタ]] > [[Jass Script]] > [[Jass講座]] > TextMacro

~
~

Jass NewGenの機能。単純なコードの繰り返しなどを省くことができる機能。コードをすっきり見せるのに便利。MAP保存時に、通常の形にコンパイルされる。

----
#contents
----
*定義 [#n8dab3a5]
テキストマクロは、''指定した範囲のコードの変数部分を置換したもの''を、繰り返し記入する際用いられる。

-範囲の指定
     //! textmacro マクロ名 takes 変数名1,変数名2,...
           〜$変数名1$〜
           〜$変数名2$〜
     //! endtextmacro

範囲内には、変換させたい変数を ''$変数名$'' の形で書いたコードを記入する。次に、変数の値を指定してこれの複製を行う。

-範囲の複製
     //! runtextmacro sample("変数1の値","変数1の値")

変数の値は、ダブルクォーテーション(")で挟む。これで、指定した範囲内のものの、それぞれの ''変数名'' が置換された文章が出力される。

範囲は何行あってもかまわないし、''library'' や ''struct'' 等を含めてもかまわない。

また、同じマクロ名をもつテキストマクロは宣言できないが、一度宣言されたテキストマクロは、コードのどの位置にも(たとえ上流であっても)挿入できる。
*使い方のサンプル [#of832161]
以下のようなコードがあるとする。
-テキストマクロなし
     function test takes integer t returns nothing
         local integer i1 = t * 1
         local integer i2 = t * 2
         local integer i3 = t * 3
         local integer i4 = t * 4
         local integer i5 = t * 5
         local integer i6 = t * 6
         local integer i7 = t * 7

これを、テキストマクロを使って書くと
-テキストマクロあり
     function test takes integer t returns nothing
         //! textmacro sample takes n
             local integer i$n$ = t * $n$
         //! endtextmacro
         //! runtextmacro sample("1")
         //! runtextmacro sample("2")
         //! runtextmacro sample("3")
         //! runtextmacro sample("4")
         //! runtextmacro sample("5")
         //! runtextmacro sample("6")
         //! runtextmacro sample("7")

このようになる。この例ではいまいちありがたみを感じないが、以下のような利点がある。
-もとの文章を改変したいとき、訂正が一箇所ですむ
-複製範囲が複数行にわたるとき、コードが見やすくなる
*注意点 [#xe2fe9d1]
複数のテキストマクロを、ネストすることはできない。
-エラーが出る例
         //! textmacro sample1 takes n1
             //! textmacro sample2 takes n2
                 set $n1$ = $n2$
             //! endtextmacro
         //! endtextmacro